home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
program
/
swagd_f.zip
/
DRIVES.SWG
/
0057_VOL Label Functions.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-11-21
|
3KB
|
118 lines
UNIT VolFuncs;
(**) INTERFACE (**)
USES Dos;
TYPE
VolString = String[12];
FUNCTION GetLabel(driveNum : Byte;
VAR V : VolString) : Boolean;
FUNCTION SetLabel(driveNum : Byte;
NuLabel : VolString) : Boolean;
FUNCTION DelLabel(driveNum : Byte) : Boolean;
(**) IMPLEMENTATION (**)
TYPE
ExFCB = RECORD
FF : Byte; {must be 0FFh}
Reserved0 : ARRAY[1..5] OF Byte; {must be 0s}
Attribute : Byte;
DriveID : Byte;
Filename : ARRAY[1..8] OF Char;
Extension : ARRAY[1..3] OF Char;
CurBlock : Word;
RecSize : Word;
FileSize : LongInt;
Date : Word;
Time : Word;
Reserved : ARRAY[1..8] OF Byte;
CurRec : Byte;
Relative : LongInt;
END;
FUNCTION GetLabel(driveNum : Byte;
VAR V : VolString) : Boolean;
CONST
Any : String[5] = ':\*.*';
VAR
SR : SearchRec;
Mask : PathStr;
P : Byte;
BEGIN
IF DriveNum > 0 THEN
Mask[1] := Char(DriveNum + ord('@'))
ELSE GetDir(0, Mask);
Move(Any[1], Mask[2], 5);
Mask[0] := #6;
FindFirst(Mask, VolumeID, SR);
WHILE (SR.Attr AND VolumeID = 0) AND
(DosError = 0) DO
FindNext(SR);
IF DosError = 0 THEN
BEGIN
FillChar(V[1], 11, ' ');
V[0] := #11;
P := Pos('.', SR.Name);
IF P = 0 THEN
Move(SR.Name[1], V[1], length(SR.Name))
ELSE
BEGIN
Move(SR.Name[1], V[1], pred(P));
Move(SR.Name[P+1], V[9], length(SR.Name)-P);
END;
GetLabel := TRUE;
END
ELSE GetLabel := FALSE;
END;
FUNCTION SetLabel(driveNum : Byte;
NuLabel : VolString) : Boolean;
VAR E : ExFCB;
BEGIN
WITH E DO
BEGIN
FF := $FF;
FillChar(Reserved0, 5, 0);
Attribute := VolumeID;
DriveID := DriveNum;
FillChar(FileName, 8, ' ');
FillChar(Extension, 3, ' ');
Move(NuLabel[1], Filename, length(NuLabel));
END;
ASM
PUSH DS
MOV AX, SS
MOV DS, AX
LEA DX, E {point DS:DX at Extended FCB}
MOV AH, 16h {create using FCB}
INT 21h
INC AL
MOV @result, AL
POP DS
END;
END;
FUNCTION DelLabel(driveNum : Byte) : Boolean;
VAR E : ExFCB;
BEGIN
WITH E DO
BEGIN
FF := $FF;
FillChar(Reserved0, 5, 0);
Attribute := VolumeID;
DriveID := DriveNum;
FillChar(FileName, 8, '?');
FillChar(Extension, 3, '?');
END;
ASM
PUSH DS
MOV AX, SS
MOV DS, AX
LEA DX, E {point DS:DX at Extended FCB}
MOV AH, 13h {delete using FCB}
INT 21h
INC AL
MOV @Result, AL
POP DS
END;
END;
END.